package com.baofu.paycore.biz.engine.command.impl;

import com.baofu.paycore.biz.engine.command.Command;
import com.baofu.paycore.biz.enums.CommandProcessorEnum;
import com.baofu.paycore.biz.enums.CommandTypeEnum;
import com.baofu.paycore.service.facade.enums.PayToolTypeEnum;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.Date;

/**
 * 余额支付命令
 *
 * User: LZQ Date: 2016/04/21  Version: 1.0
 */
@Getter
@Setter
@ToString
public class BalanceCommand implements Command {

    /** 支付单号 */
    private String  requestOrderNo;

    /** 业务流水号 */
    private String  requestBizNo;

    /** 请求系统 */
    private String  requestSystem;

    /** 请求时间 */
    private Date    requestDate;

    /** 关联号 */
    private String  relationNo;

    /** 货币类型 */
    private String  ccy;

    /** 交易金额：单位：分 */
    private Long  amount;

    /** 手续费金额 */
    private Long bizChargeAmt;

    /** 业务产品 */
    private String  bizType;

    /** 业务产品细类 */
    private String  subBizType;

    /** 资金渠道 */
    private String  fundingChannel;

    /** 资金渠道细类 */
    private String  subFundingChannel;

    /** 备注 */
    private String  remark;

    /** 操作人 */
    private String  operator;

    /** 收款方账号 */
    private String  payeeAccNo;

    /** 收款方账户类型 */
    private String  payeeAccType;

    /** 收账账户不可提现标识 */
    private String  payeeUnWithdrawFlag;

    /** 付款方账号 */
    private String  payerAccNo;

    /** 付款方账户类型 */
    private String  payerAccType;

    /** 出账账户不可提现标识 */
    private String  payerUnWithdrawFlag;

    /** 同步入账标识 */
    private boolean asyPayeeFlag;

    /** 账务处理时间，账务系统返回 */
    private Date    transDt;

    /** 账务凭证号 */
    private String  transReceiptNo;

    /** 追踪日志ID */
    private String traceLogId;

    /** 事件号 */
    private String eventNo;

    /** 资金明细No */
    private String fundDetailNo;

    /** 解冻凭证号 */
    private String  unfreezeReceipt;

    /** 服务编码 */
    private String serviceCode;

    /** 支付单号 */
    private String payNo;

    /** 描述 */
    private String          description;

    /**
     * 获取支付命令类型
     * @return  返回该命令的类型枚举
     */
    @Override
    public CommandTypeEnum getCommandType() {
        return CommandTypeEnum.BALANCE_PAY;
    }

    /**
     * 获取命令所针对的支付工具。
     * @return  返回命令所针对的支付工具。
     */
    @Override
    public PayToolTypeEnum getPayToolType() {
        return PayToolTypeEnum.ACCOUNT;
    }

    /**
     * 获取该命令对应的处理器。
     * @return  返回该命令的对应的处理器的枚举。
     */
    @Override
    public CommandProcessorEnum getProcessorType() {
        return CommandProcessorEnum.BALANCE_PROCESSOR;
    }

    /**
     * 获取优先级
     * @return 级别
     */
    @Override
    public int getOrder() {
        return 1;
    }

    /**
     * 获取指令ID
     *
     * @return 指令编号
     */
    @Override
    public String getCommandNo() {
        return fundDetailNo;
    }

    /**
     * 将命令对象与指定的命令对象进行比较
     * @param   paymentCommand  命令对象
     * @return  返回负整数，零，或正整数
     */
    @Override
    public int compareTo(Command paymentCommand) {
        return this.getOrder() - paymentCommand.getOrder();
    }

}
